package com.cskaoyan.javase.oop2._1extends._0introduction._1new;

import com.sun.media.jfxmedia.events.NewFrameEvent;

/**
 * 根据我们之前学过的知识，完成如下练习：
 * 分别定义一个表示人和学生的类：
 * 1. 人类：有姓名属性，以及吃饭这个行为
 * 2. 教师类：有姓名，教师号两个属性，同时有吃饭，教学两种行为
 * 3. 学生类：有姓名，学号两个属性，同时有吃饭，学习两种行为
 *
 * 定义完三个类后,有什么特点?
 * 三个类都具有相同的属性和行为:
 *     1.名字
 *     2.吃饭
 * 既然有相同的就考虑复用它们,方法是在同类当中复用代码,而当需要复用类的成员时,使用——类的继承来实现。
 *
 *
 * 使用继承来复用类的成员，在Java当中，在定义一个类时，可以使用extends关键字来明确指出它继承了某一个类。继承的目的是得到被继承类的所有成员。
 * 语法：
 * [访问权限修饰符] class 类名 extends 被继承类的类名{
 *     // 类体
 * }
 *
 * 注意事项：
 *      1.在继承中，被继承的类称之为父类，继承父类的类是子类。
 *      2.子类继承父类后会得到父类的所有成员
 *          注：指的是普通成员，静态成员不考虑继承（后面会讲），构造器不属于成员，也是无法被继承的。
 *      3.子类不能继承父类中没有的成员。
 *      4.子类在继承父类的同时，还可以自定义自身的成员，这叫做在父类的基础上扩展父类（青出于蓝而胜于蓝）
 *          子类和父类比，子类往往功能更强大（具有更多的成员）
 *
 * @since 17:07
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Teacher t = new Teacher();
        // eat方法和name属性都是继承自Person类的
        t.eat();
        System.out.println(t.name);
    }
}

class Person {
    String name;

    public void eat() {
        System.out.println("吃饭!");
    }
}

class Teacher extends Person {
    int teacherId;

    public void teach() {
        System.out.println("上课!");
    }
}

class Student extends Person {
    int stuId;

    public void study() {
        System.out.println("学习!");
    }
}
